約 2,166,701 件
https://w.atwiki.jp/lucier/pages/37.html
先に作成した管理画面でのお問合わせ機能だけだと閲覧のみなので、管理画面からメールを返信できるようにカスタマイズする. ※これが大変だったんだった。 サイトどおりにやってもうまくいかない。ホント。 データベースの編集 お問合わせ管理画面からメールを扱えるようにするため、EC-CUBE上で送信されているメールの情報を格納しているテーブルを編集します。 dtb_mail_history デフォルトでは「order_id」が「NOT_NULL」すなわち、お買い物データがないものは、エラーとなってしまいますので、この制限をはずします。 また、送信先のメールアドレスを保存するために、「email」カラムを「text」型で追加します。 mtb_mail_template 管理画面から、 システム設定>マスタデータ管理>mtb_mail_template と進んで、 ID 5 値 お問合わせ返信 を追加する。 mtb_mail_tpl_path も同様に、 ID 5 値 mail_tenplates/contact_re_mail.tpl を追加。 ファイルを作る order系のファイルを複製して以下のファイルを作る。 下記ファイル以外にも編集しなきゃいけないクラスがあったりする。 /html/admin/customer/mail.php /html/admin/customer/mail_confirm.php /html/admin/customer/mail_view.php /data/Smarty/templates/default/admin/customer/mail.tpl /data/Smarty/templates/default/admin/customer/mail_confirm.tpl /data/Smarty/templates/default/admin/customer/mail_view.tpl /data/Smarty/templates/default/mail_template/contact_re_mail.tpl /data/class/pages/admin/customer/LC_Page_Admin_Contact_Mail.php /data/class/pages/admin/customer/LC_Page_Admin_Contact_MailView.php クラスの編集 /data/class/helper/SC_Helper_Mail.php 以下のメソッドを追加 /*** * 2009.04.27 追加 * @author i-enter y-nakajima * 返信メール送信メソッド * @param $contact_id, $template_id, $subject = "", $header = "", $footer = "", $send = true **/ function sfSendContactMail($contact_id, $template_id, $subject = "", $header = "", $footer = "", $send_flg = true) { $objPage = new LC_Page(); $objSiteInfo = new SC_SiteInfo(); $arrInfo = $objSiteInfo- data; $objPage- arrInfo = $arrInfo; $objQuery = new SC_Query(); if($subject == "" $header == "" $footer == ""){ // メールテンプレート情報の取得 $where = "template_id = ?"; $arrRet = $objQuery- select("subject, header, footer", "dtb_mailtemplate", $where, array( 1 )); $objPage- tpl_header = $arrRet[0][ header ]; $objPage- tpl_footer = $arrRet[0][ footer ]; $tmp_subject = $arrRet[0][ subject ]; } else { $objPage- tpl_header = $header; $objPage- tpl_footer = $footer; $tmp_subject = $subject; } // 問い合わせ情報の取得 $where = "contact_id = ?"; $arrRet = $objQuery- select("*", "dtb_contact", $where, array($contact_id)); $objPage- arrContact = $arrRet[0]; $objMailView = new SC_SiteView(); // メール本文の取得 $objMailView- assignobj($objPage); $body = $objMailView- fetch($this- arrMAILTPLPATH[$template_id]); // メール送信処理 $objSendMail = new SC_SendMail_Ex(); $bcc = $arrInfo[ email01 ]; $from = $arrInfo[ email03 ]; $error = $arrInfo[ email04 ]; $tosubject = $this- sfMakeSubject($objQuery, $objMailView, $objPage, $tmp_subject); $objSendMail- setItem( , $tosubject, $body, $from, $arrInfo[ shop_name ], $from, $error, $error, $bcc); $objSendMail- setTo($arrRet[0][ email ] , $arrRet[0][ name ] . . $arrRet[0][ name_f ] . 様 ); // 送信フラグ trueの場合はTXTメール送信を実行する if($send_flg){ if($objSendMail- sendMail()){ $this- sfSaveMailHistory2($arrRet[0][ email ], $template_id, $tosubject, $body); } } return $objSendMail; } /*** * 2009.04.27 追加 * @author i-enter y-nakajima * メール配信履歴への登録 * @param $email, $template_id, $subject, $body **/ function sfSaveMailHistory2($email, $template_id, $subject, $body) { $sqlval[ subject ] = $subject; $sqlval[ email ] = $email; $sqlval[ template_id ] = $template_id; $sqlval[ send_date ] = "Now()"; if(!isset($_SESSION[ member_id ])) $_SESSION[ member_id ] = ""; if($_SESSION[ member_id ] != "") { $sqlval[ creator_id ] = $_SESSION[ member_id ]; } else { $sqlval[ creator_id ] = 0 ; } $sqlval[ mail_body ] = $body; $objQuery = new SC_Query(); $objQuery- insert("dtb_mail_history", $sqlval); } 次に以下のファイルを編集。 /data/class/pages/admin/customer/LC_Page_Admin_Contact_Mail.php ?php require_once(CLASS_PATH . "pages/LC_Page.php"); /** * お問い合わせメール管理 のページクラス. */ class LC_Page_Admin_Contact_Mail extends LC_Page { /** * Page を初期化する. * * @return void */ function init() { parent init(); $this- tpl_mainpage = customer/mail.tpl ; $this- tpl_subnavi = customer/subnavi.tpl ; $this- tpl_mainno = customer ; $this- tpl_subno = contact ; $this- tpl_subtitle = お問合わせ返信 ; $masterData = new SC_DB_MasterData_Ex(); $this- arrMAILTEMPLATE = $masterData- getMasterData("mtb_mail_template"); } /** * Page のプロセス. * * @return void */ function process() { $objView = new SC_AdminView(); $objSess = new SC_Session(); SC_Utils_Ex sfIsSuccess($objSess); if(SC_Utils_Ex sfIsInt($_GET[ contact_id ])){ $this- tpl_contact_id = $_GET[ contact_id ]; }elseif(SC_Utils_Ex sfIsInt($_POST[ contact_id ])){ $this- tpl_contact_id = $_POST[ contact_id ]; } // パラメータ管理クラス $objFormParam = new SC_FormParam(); // パラメータ情報の初期化 $this- lfInitParam($objFormParam); $objMail = new SC_Helper_Mail_Ex(); switch($_POST[ mode ]) { case pre_edit break; case return // POST値の取得 $objFormParam- setParam($_POST); break; case send // POST値の取得 $objFormParam- setParam($_POST); // 入力値の変換 $objFormParam- convParam(); $this- arrErr = $objFormParam- checkError(); // メールの送信 if (count($this- arrErr) == 0) { // 問合せ返信メール $objSendMail = $objMail- sfSendContactMail($this- tpl_contact_id, $_POST[ template_id ], $_POST[ subject ], $_POST[ header ], $_POST[ footer ]); } $this- sendRedirect($this- getLocation("./contact.php"), true); exit; break; case confirm // POST値の取得 $objFormParam- setParam($_POST); // 入力値の変換 $objFormParam- convParam(); // 入力値の引き継ぎ $this- arrHidden = $objFormParam- getHashArray(); $this- arrErr = $objFormParam- checkError(); // メールの送信 if (count($this- arrErr) == 0) { // 問合せ返信メール(送信なし) $objSendMail = $objMail- sfSendContactMail($this- tpl_contact_id, $_POST[ template_id ], $_POST[ subject ], $_POST[ header ], $_POST[ footer ], false); // 確認ページの表示 $this- tpl_subject = $_POST[ subject ]; $this- tpl_body = mb_convert_encoding( $objSendMail- body, CHAR_CODE, "auto" ); $this- tpl_to = $objSendMail- arrRecip["To"]; $this- tpl_mainpage = customer/mail_confirm.tpl ; $this- arrHidden[ contact_id ] = $this- tpl_contact_id; $objView- assignobj($this); $objView- display(MAIN_FRAME); exit; } break; case change // POST値の取得 $objFormParam- setValue( template_id , $_POST[ template_id ]); if(SC_Utils_Ex sfIsInt($_POST[ template_id ])) { $objQuery = new SC_Query(); $where = "template_id = ?"; $arrRet = $objQuery- select("subject, header, footer", "dtb_mailtemplate", $where, array($_POST[ template_id ])); $objFormParam- setParam($arrRet[0]); } break; } $objQuery = new SC_Query(); $where = "contact_id = ?"; $arrRet = $objQuery- select("*", "dtb_contact", $where, array($this- tpl_contact_id)); $col = "send_date, subject, template_id, send_id"; $where = "email = ?"; $objQuery- setorder("send_date DESC"); $this- arrMailHistory = $objQuery- select($col, "dtb_mail_history", $where, array($arrRet[0][ email ])); $this- arrForm = $objFormParam- getFormParamList(); $objView- assignobj($this); $objView- display(MAIN_FRAME); } /** * デストラクタ. * * @return void */ function destroy() { parent destroy(); } /* パラメータ情報の初期化 */ function lfInitParam( $objFormParam) { $objFormParam- addParam("テンプレート", "template_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK")); $objFormParam- addParam("メールタイトル", "subject", STEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "SPTAB_CHECK")); $objFormParam- addParam("ヘッダー", "header", LTEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "SPTAB_CHECK")); $objFormParam- addParam("フッター", "footer", LTEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "SPTAB_CHECK")); } } ? 次はこれをorderのをコピーして編集。 /data/class/pages/admin/customer/LC_Page_Admin_Contact_MailView.php ?phprequire_once(CLASS_PATH . "pages/LC_Page.php"); /** * お問合わせメール確認 のページクラス. */class LC_Page_Admin_Contact_MailView extends LC_Page { /** * Page を初期化する. * * @return void */ function init() { parent init(); $this- tpl_mainpage = customer/mail_view.tpl ; } /** * Page のプロセス. * * @return void */ function process() { $objView = new SC_AdminView(); $objSess = new SC_Session(); // 認証可否の判定 SC_Utils_Ex sfIsSuccess($objSess); if(SC_Utils_Ex sfIsInt($_GET[ send_id ])) { $objQuery = new SC_Query(); $col = "subject, mail_body"; $where = "send_id = ?"; $arrRet = $objQuery- select($col, "dtb_mail_history", $where, array($_GET[ send_id ])); $this- tpl_subject = $arrRet[0][ subject ]; $this- tpl_body = $arrRet[0][ mail_body ]; } $objView- assignobj($this); $objView- display($this- tpl_mainpage); } /** * デストラクタ. * * @return void */ function destroy() { parent destroy(); }}? テンプレートの編集 /data/Smarty/templates/default/adin/customer/mail.tpl の以下を変更 Line 28 28. input type="hidden" name="order_id" value=" !--{$tpl_order_id}-- " ↓↓↓↓ 28. input type="hidden" name="order_id" value=" !--{$tpl_contact_id}-- " Line142 142. input type="button" name="back" value="検索結果へ戻る" onclick="fnChangeAction( !--{$smarty.const.URL_SEARCH_ORDER}-- ); fnModeSubmit( search , , ); return false;" / ↓↓↓↓ 142. input type="button" name="back" value="検索結果へ戻る" onclick="fnChangeAction( contact.php ); fnModeSubmit( , , ); return false;" / /data/Smarty/templates/default/adin/customer/contact_re_mail.tpl を新規作成。 お問合せ内容が挿入されます。 !--{$tpl_header}-- ---------------------------------------------- ■お問合せ日時: !--{$arrContact.create_date}-- ■お問い合わせ内容 !--{$arrContact.message}-- ---------------------------------------------- !--{$tpl_footer}-- カスタマイズ結果はこんな感じです。
https://w.atwiki.jp/lucier/pages/2.html
メニュー トップページ EC-CUBE開発メモ一覧 [EC-CUBE]カスタマイズのときに役立つvar_dump用関数 メニューを編集する★ サイト内検索 更新履歴 取得中です。 リンク @wiki @wikiご利用ガイド UTF-8 TeraTerm Pto with TTSSHの使い方 EC-CUBE開発参考サイト カゴラボ的EC-CUBE開発ブログ 機能改造専門店EC-CUIBE工房 EC-CUBEの学校 ゆちぞ〓ハマりまくり マニュアルサイト EC-CUBE構築TIPS EC-CUBEノウハウwiki(株式会社エスキュービズム) EC-CUBEテンプレート研究所 Apache系参考サイト AdminWeb PHPチャレンジ 画面レイアウト系参考サイト TAGindex HTML色見本 その他 特定商取引法(経済産業省) @wikiリンク プラグイン紹介 まとめサイト作成支援ツール 他のサービス 無料ホームページ作成 無料ブログ作成 2ch型掲示板レンタル 無料掲示板レンタル お絵かきレンタル 無料ソーシャルプロフ
https://w.atwiki.jp/lucier/pages/30.html
とりあえずリンク PHPでQRバーコードを作成する
https://w.atwiki.jp/lucier/pages/18.html
「送料に関して」という項目を追加する方法。 data/Smarty/templates/テンプレートディレクトリ/mobile/guide/index.tpl デフォルトでは !– ▼メニュー ここから – a href="usage.php" accesskey="1" !–{1|numeric_emoji}– ご利用方法 /a br a href="privacy.php" accesskey="2" !–{2|numeric_emoji}– プライバシーポリシー /a br a href="charge.php" accesskey="3" !–{3|numeric_emoji}– 通信料について /a br a href="kiyaku.php" accesskey="4" !–{4|numeric_emoji}– ご利用規約 /a br a href="about.php" accesskey="5" !–{5|numeric_emoji}– 運営会社紹介 /a br !– ▲メニュー ここまで – のようになっているのを、 !– ▼メニュー ここから – a href="usage.php?page=1" accesskey="1" !–{1|numeric_emoji}– ご利用ガイド /a br a href="usage.php?page=2" accesskey="2" !–{2|numeric_emoji}– 送料に関して /a br a href="privacy.php" accesskey="3" !–{3|numeric_emoji}– プライバシーポリシー /a br a href="charge.php" accesskey="4" !–{4|numeric_emoji}– 通信料について /a br a href="kiyaku.php" accesskey="5" !–{5|numeric_emoji}– ご利用規約 /a br a href="about.php" accesskey="6" !–{6|numeric_emoji}– 運営会社紹介 /a br !– ▲メニュー ここまで – に変更。 そして、 data/Smarty/templates/テンプレートディレクトリ/mobile/guide/usage2.tpl の内容を適宜変更してアップしておけばOK。
https://w.atwiki.jp/lucier/pages/44.html
商品登録で「商品送料」の項目(本来は金額)に商品の重量(g単位)を入力してある 運送業者は1つ 下記の送料 送料はソースコードに直書きする。 こんなんでいいのか・・・ パラメータ OPTION_PRODUCT_DELIV_FEE = 1 OPTION_DELIV_FEE = 0 /data/class_extends/helper_extends/SC_Helper_DB_Ex.php class SC_Helper_DB_Ex extends SC_Helper_DB { function lfCalcAllProductsDelivFee( $arrData, $objCartSess) { // 商品送料に入力された金額を重量(g)とみなして取得 $weight = parent lfCalcAllProductsDelivFee($arrData, $objCartSess); // 都道府県と重量に応じた送料を返す switch ($arrData[ deliv_pref ]) { case 13 // 東京都 if ($weight = 2000) return 500; if ($weight = 5000) return 600; return 700; case 1 // 北海道 case 47 // 沖縄県 if ($weight = 2000) return 1000; if ($weight = 5000) return 1200; return 1400; default // 他 if ($weight = 2000) return 700; if ($weight = 5000) return 800; return 900; } }}
https://w.atwiki.jp/lucier/pages/33.html
帳票右上ロゴの画像データ保存先 html\user_data\packages\default\img\pdf 以下の順で処理が進んでいるので、 画像のサイズ変更など、テンプレートの編集が必要な場合は以下を編集。 html/admin/order/pdf.php data/page_extends/admin/order/LC_Page_Admin_Order_Pdf_Ex.php data/class_extends/page_extends/admin/order/LC_Page_Admin_Order_Pdf_Ex.php data/class/pages/admin/order/LC_Page_Admin_Order_Pdf.php data/class/SC_Fpdf.php 関数 SC_Fpdf
https://w.atwiki.jp/eccube2ch/pages/26.html
2系ファイル修正 注意:EC-CUBEはVerがあがらないとファイル修正をほったらかします。 パッチを作ってもダウンロードファイルの修正はほとんどしません。 Verごとの修正部分を確認するようにしてください。 2系-商品表示順バグ修正手順 2系-【管理画面>デザイン管理>レイアウト編集】左右ナビ位置の変更が反映されない不具合を改修 2系-コンテンツ管理-オススメ管理-商品選択 でカテゴリを指定して検索ができない 公式パッチ EC-CUBE2.0.1* ◆パッチファイルは指定ディレクトリに配置後、ファイル名のアドレスを入力して開いてください ①商品登録で関連商品が編集できなくなる不具合 管理画面>基本情報設定>パラメータ設定 パラメータ設定を行うと商品登録で関連商品が編集できなくなる不具合を修正しました。 ※データベースの更新が必要です。下記ファイルをダウンロード・解凍し、"/html/admin/"直下に設置してご利用下さい。 sql_patch0003.zip ②複数カテゴリ対応により商品並べ替えが機能しない不具合 管理画面>商品管理>商品並び替え 複数カテゴリ対応により商品並べ替えが機能しない不具合を修正しました。 ※データベースの更新が必要です。下記ファイルをダウンロード・解凍し、"/html/admin/"直下に設置してご利用下さい。 sql_patch0002.zip
https://w.atwiki.jp/lucier/pages/34.html
docomoの場合、モバイルのテンプレートのalinkのせいで リンクがつぶれて見える。 以下のファイルの body タグ内のalinkをなくす。 /data/Smarty/templates/default/mobile/site_main.tpl こんなかんじ
https://w.atwiki.jp/lucier/pages/36.html
[EC-CUBE]お問い合わせメールを管理画面で確認できるようにする ※超大変だった。コレ。 サイトに載っててる通りにやってもうまくいかないので、注意。 カスタマイズ結果はこんな感じに。 1.テーブルを追加 お問い合わせを保存するテーブルを追加する。 テーブル名 dtb_contact 以下のSQLを発行し、テーブルをCREATEする。 mysql用。PostgreSQLだったら、create_date timstamp のところを create_date timestamp without time zone, に変えてね CREATE TABLE dtb_contact ( contact_id serial NOT NULL, name text, name_f text, zip01 text, zip02 text, pref integer, addr01 text, tel01 text, tel02 text, tel03 text, email text, message text, create_date timestamp , del_flg integer DEFAULT 0, customer_id integer, status integer DEFAULT 0); 作成したテーブルに対して一意性制約を加える。 alter table dtb_contact add constraint dtb_contact_contact_id_key unique (contact_id); 2.INSERT文の作成。 お問い合わせのページのクラスを編集してINSERTのための処理を追記する。 /data/class/pages/contact/LC_Page_Contact.php 以下のメソッドを追加。 // ------------ データベースへ格納 ------------function lfRegisterContactData(){ $sqlval = array(); $objQuery = new SC_Query(); $sqlval[ name ] = $this- arrForm[ name01 ]; $sqlval[ name_f ] = $this- arrForm[ name02 ]; $sqlval[ email ] = $this- arrForm[ email ]; $sqlval[ zip01 ] = $this- arrForm[ zip01 ]; $sqlval[ zip02 ] = $this- arrForm[ zip02 ]; $sqlval[ pref ] = $this- arrForm[ pref ]; $sqlval[ addr01 ] = $this- arrForm[ addr01 ]; $sqlval[ tel01 ] = $this- arrForm[ tel01 ]; $sqlval[ tel02 ] = $this- arrForm[ tel02 ]; $sqlval[ tel03 ] = $this- arrForm[ tel03 ]; $sqlval[ message ] = $this- arrForm[ contents ]; $sqlval[ create_date ] = Now() ; if(isset($this- arrData[ customer_id ]) !empty($this- arrData[ customer_id ])){ $sqlval[ customer_id ] = $this- arrData[ customer_id ]; } $objQuery- insert("dtb_contact", $sqlval);} complete時に上記メソッドを呼び出す。(122行目あたり) case complete $this- arrForm = $_POST; $this- arrForm[ email ] = strtolower($_POST[ email ]); $this- arrForm = $this- lfConvertParam($this- arrForm,$arrConvertColumn); $this- arrErr = $this- lfErrorCheck($this- arrForm); $this- lfRegisterContactData(); //追加if(!$this- arrErr) { ここまででDBへの登録が可能になる。 3.お問い合わせ内容の表示 以下の4ファイルを新規作成する。 ※ただし、4ファイルとも同じディレクトリにあるedit.php(.tpl)をコピーして作成すること。 /html/admin/customer/contact.php /data/class_extends/page_extends/admin/customer/LC_Page_Admin_Customer_Contact_Ex.php /data/class/pages/admin/customer/LC_Page_Admin_Customer_Contact.php /data/Smarty/templates/default/admin/customer/contact.tpl contact.php LC_Page_Admin_Customer_Edit_Ex となっている箇所を LC_Page_Admin_Customer_Contact_Ex に変更します。 ?php require_once("../../require.php");require_once(CLASS_EX_PATH . "page_extends/admin/customer/LC_Page_Admin_Customer_Contact_Ex.php"); $objPage = new LC_Page_Admin_Customer_Contact_Ex();register_shutdown_function(array($objPage, "destroy"));$objPage- init();$objPage- process();? LC_Page_Admin_Customer_Contact_Ex.php このファイルも、Customer_Edit となっているところを Customer_Contact に変更します。 ?phprequire_once(CLASS_PATH . "pages/admin/customer/LC_Page_Admin_Customer_Contact.php"); class LC_Page_Admin_Customer_Contact_Ex extends LC_Page_Admin_Customer_Contact { /** * Page を初期化する. * * @return void */ function init() { parent init(); } /** * Page のプロセス. * * @return void */ function process() { parent process(); } /** * デストラクタ. * * @return void */ function destroy() { parent destroy(); }}? LC_Page_Admin_Customer_Contact.php このファイルはすべて書き直し。 ?phprequire_once(CLASS_PATH . "pages/LC_Page.php"); class LC_Page_Admin_Customer_Contact extends LC_Page { function init() { parent init(); $this- tpl_mainpage = customer/contact.tpl ; $this- tpl_subnavi = customer/subnavi.tpl ; $this- tpl_mainno = customer ; $this- tpl_subno = contact ; $this- tpl_pager = TEMPLATE_DIR . admin/pager.tpl ; $this- tpl_subtitle = お問い合わせ管理 ; $masterData = new SC_DB_MasterData_Ex(); $this- arrSex = $masterData- getMasterData("mtb_sex"); $this- arrPageMax = $masterData- getMasterData("mtb_page_max"); } /** * Page のプロセス. * * @return void */ function process() { // 認証可否の判定 $objSess = new SC_Session(); SC_Utils_Ex sfIsSuccess($objSess); // モードチェック if(!isset($_POST[ mode ])) { $_POST[ mode ] = ""; } elseif($_POST[ mode ] == delete ) { if(SC_Utils_Ex sfIsInt($_POST[ contact_id ])) { $objQuery = new SC_Query(); $where = "contact_id = ?"; $sqlval[ del_flg ] = 1 ; $objQuery- update("dtb_contact", $sqlval, $where, array($_POST[ contact_id ])); } } // 表示順の指定 $order = "create_date DESC"; // 読み込む列とテーブルの指定 $col = "*"; $from = "dtb_contact"; $where = "del_flg = 0"; $objQuery = new SC_Query(); // 行数の取得 $linemax = $objQuery- count($from, $where); $this- tpl_linemax = $linemax; // 何件が該当しました。表示用 // ページ送り用 if(is_numeric($_POST[ search_page_max ])) { $page_max = $_POST[ search_page_max ]; } else { $page_max = SEARCH_PMAX; } // ページ送りの取得 $this- arrHidden[ search_pageno ] = isset($_POST[ search_pageno ]) ? $_POST[ search_pageno ] ""; $objNavi = new SC_PageNavi($this- arrHidden[ search_pageno ], $linemax, $page_max, "fnNaviSearchPage", NAVI_PMAX); $startno = $objNavi- start_row; $this- arrPagenavi = $objNavi- arrPagenavi; // 取得範囲の指定(開始行番号、行数のセット) $objQuery- setlimitoffset($page_max, $startno); // 表示順序 $objQuery- setorder($order); // 検索結果の取得 $this- arrResults = $objQuery- select($col, $from, $where); $objView = new SC_AdminView(); $objView- assignobj($this); $objView- display(MAIN_FRAME); }}? contact.tpl 表示用テンプレ。これも丸ごと書き換える。 !--★★メインコンテンツ★★-- table width="878" border="0" cellspacing="0" cellpadding="0" summary=" " tr valign="top" td background=" !--{$TPL_DIR}-- img/contents/navi_bg.gif" height="443" !-- サブナビ -- !--{include file=$tpl_subnavi}-- /td td class="mainbg" table width="737" border="0" cellspacing="0" cellpadding="0" summary=" " !--メインエリア-- tr td align="center" !--★★メインコンテンツ★★-- !--{if count($arrErr) == 0 }-- !--★★検索結果一覧★★-- form name="form1" id="form1" method="post" action=" !--{$smarty.server.PHP_SELF|escape}-- " input type="hidden" name="mode" value="search" input type="hidden" name="contact_id" value="" !--{foreach key=key item=item from=$arrHidden}-- input type="hidden" name=" !--{$key}-- " value=" !--{$item|escape}-- " !--{/foreach}-- table width="737" border="0" cellspacing="0" cellpadding="0" summary=" " tr td colspan="2" img src=" !--{$TPL_DIR}-- img/contents/search_line.jpg" width="737" height="12" alt="" /td /tr tr bgcolor="cbcbcb" td table border="0" cellspacing="0" cellpadding="0" summary=" " tr td img src=" !--{$TPL_DIR}-- img/contents/search_left.gif" width="19" height="22" alt="" /td td !--検索結果-- table border="0" cellspacing="0" cellpadding="0" summary=" " tr td img src=" !--{$TPL_DIR}-- img/contents/reselt_left_top.gif" width="22" height="5" alt="" /td td background=" !--{$TPL_DIR}-- img/contents/reselt_top_bg.gif" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td td img src=" !--{$TPL_DIR}-- img/contents/reselt_right_top.gif" width="22" height="5" alt="" /td /tr tr td background=" !--{$TPL_DIR}-- img/contents/reselt_left_bg.gif" img src=" !--{$TPL_DIR}-- img/contents/reselt_left_middle.gif" width="22" height="12" alt="" /td td bgcolor="#393a48" class="white10" 検索結果一覧 span class="reselt" !--検索結果数-- !--{$tpl_linemax}-- 件 /span nbsp;が該当しました。 /td td background=" !--{$TPL_DIR}-- img/contents/reselt_right_bg.gif" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="22" height="8" alt="" /td /tr tr td img src=" !--{$TPL_DIR}-- img/contents/reselt_left_bottom.gif" width="22" height="5" alt="" /td td background=" !--{$TPL_DIR}-- img/contents/reselt_bottom_bg.gif" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td td img src=" !--{$TPL_DIR}-- img/contents/reselt_right_bottom.gif" width="22" height="5" alt="" /td /tr /table !--検索結果-- /td td img src=" !--{$TPL_DIR}-- img/common/_.gif" width="8" height="1" alt="" /td /tr /table /td td align="right" !--{include file=$tpl_pager}-- /td /tr tr td bgcolor="cbcbcb" colspan="2" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td /tr /table table width="737" border="0" cellspacing="0" cellpadding="0" summary=" " tr td bgcolor="#f0f0f0" align="center" !--{if count($arrResults) 0}-- table width="737" border="0" cellspacing="0" cellpadding="0" summary=" " tr td height="12" /td /tr tr td bgcolor="#cccccc" !--検索結果表示テーブル-- table class="fs12" width="100%" border="0" cellspacing="1" cellpadding="3" summary=" " bgcolor="#cccccc" tr align="center" bgcolor="#636469" STYLE="color #ffffff;" td rowspan="2" 状況 /td td 名前 /td td rowspan="2" 内容 /td td メールアドレス /td td rowspan="2" 受信日時 /td td rowspan="2" 住所 /td td rowspan="2" 操作 /td /tr tr align="center" bgcolor="#636469" STYLE="color #ffffff;" td 会員ID /td td TEL /td /tr !--{foreach from=$arrResults key=k item=v}-- tr bgcolor="#ffffff" td align="center" rowspan="2" a href = "./contact_detail.php?contact_id= !--{ $v.contact_id }-- " !--{ if $v.status == 0 }-- span STYLE="color red; font-weight bold;" 未読 /span !--{ elseif $v.status == 1 }-- 既読 !--{ elseif $v.status == 2 }-- 対応中 !--{ elseif $v.status == 3 }-- 対応済 !--{ /if }-- /a /td td !--{ $v.name }-- !--{ $v.name_f }-- 様 /td td rowspan="2" a href = "./contact_detail.php?contact_id= !--{ $v.contact_id }-- " !--{ $v.message|truncate 30}-- /a /td td !--{mailto address=$v.email encode="javascript"}-- /td td rowspan="2" !--{ $v.create_date|sfDispDBDate}-- /td td rowspan="2" 〒 !--{ $v.zip01 }-- - !--{ $v.zip02 }-- br !--{$arrPref[$v.pref]}-- !--{ $v.addr01 }-- /td td align="center" span class="icon_mail" a href = "./contact_reply.php?contact_id= !--{ $v.contact_id }-- " 返信 /a /span /td /tr tr bgcolor="#ffffff" td align="right" !--{ if $v.customer_id }-- !--{ $v.customer_id }-- !--{ else }-- 非会員 !--{ /if }-- /td td !--{ $v.tel01 }-- - !--{ $v.tel02 }-- - !--{ $v.tel03 }-- /td td align="center" span class="icon_delete" a href = " !--{$smarty.server.PHP_SELF|escape}-- " onclick= "fnModeSubmit( delete , contact_id , !--{ $v.contact_id }-- ); return false;" 削除 /a /span /td /tr !--{ /foreach }-- /table !--検索結果表示テーブル-- /td /tr /table !--{/if}-- /td /tr /table !--★★検索結果一覧★★-- table width="737" border="0" cellspacing="0" cellpadding="0" summary=" " tr td bgcolor="cbcbcb" colspan="2" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td /tr tr bgcolor="cbcbcb" td table border="0" cellspacing="0" cellpadding="0" summary=" " tr td img src=" !--{$TPL_DIR}-- img/contents/search_left.gif" width="19" height="22" alt="" /td td img src=" !--{$TPL_DIR}-- img/common/_.gif" width="8" height="1" alt="" /td /tr /table /td td align="right" !--{include file=$tpl_pager}-- /td /tr tr td bgcolor="cbcbcb" colspan="2" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td /tr /table /form !--{/if}-- /td /tr !--メインエリア-- /table /td /tr /table subnavi.tpl contact.tplと同じディレクトリにあるsubnavi.tplの 左ナビに「お問合わせ管理」を追加。 table width="141" border="0" cellspacing="0" cellpadding="0" summary=" " id="menu_navi" !--ナビ-- tr td class= !--{if $tpl_subno != index }-- "navi" !--{else}-- "navi-on" !--{/if}-- a href="./index.php" onMouseOver="naviStyleChange( index , #a5a5a5 )" !--{if $tpl_subno != index }-- onMouseOut="naviStyleChange( index , #636469 )" !--{/if}-- id="index" img src=" !--{$TPL_DIR}-- img/contents/icon.jpg" width="15" height="9" alt="" border="0" span class="navi_text" 顧客マスタ /span /a /td /tr tr td img src=" !--{$TPL_DIR}-- img/contents/navi_line.gif" width="140" height="2" alt="" /td /tr !--以下を追加-- tr td class= !--{if $tpl_subno != contact }-- "navi" !--{else}-- "navi-on" !--{/if}-- a href="./contact.php" onMouseOver="naviStyleChange( contact , #a5a5a5 )" !--{if $tpl_subno != contact }-- onMouseOut="naviStyleChange( contact , #636469 )" !--{/if}-- id="contact" img src=" !--{$TPL_DIR}-- img/contents/icon.jpg" width="15" height="9" alt="" border="0" span class="navi_text" お問い合わせ管理 /span /a /td /tr tr td img src=" !--{$TPL_DIR}-- img/contents/navi_line.gif" width="140" height="2" alt="" /td /tr !--ここまで-- !--ナビ-- /table 4.お問合わせ詳細表示 詳細表示できるようにさらに実装する。 以下のファイルを新規作成する。 /html/admin/customer/contact_detail.php /data/class_extends/page_extends/admin/customer/LC_Page_Admin_Customer_Contact_Detail_Ex.php /data/class/pages/admin/customer/LC_Page_Admin_Customer_Contact_Detail.php /data/Smarty/templates/default/admin/customer/contact_detail.tpl 作業の流れは、お問合わせ管理画面を作っていったときと同様。 /html/admin/customer/contact_detail.php /data/class_extends/page_extends/admin/customer/LC_Page_Admin_Customer_Contact_Detail_Ex.php 上記の2つは、contact.phpやLC_Page_Admin_Customer_Contact_Ex.phpの時と同じようにクラス名や、 インクルードするファイル名などを変更。 LC_Page_Admin_Customer_Contact_Detail.php highlight(linenumber,php){{ ?php require_once(CLASS_PATH . "pages/LC_Page.php"); class LC_Page_Admin_Customer_Contact_Detail extends LC_Page { /** * Page を初期化する. * * @return void */ function init() { parent init(); $this- tpl_mainpage = customer/contact_detail.tpl ; $this- tpl_mainno = customer ; $this- tpl_subnavi = customer/subnavi.tpl ; $this- tpl_subno = contact ; $this- tpl_pager = TEMPLATE_DIR . admin/pager.tpl ; $this- tpl_subtitle = お問い合わせ詳細 ; $masterData = new SC_DB_MasterData_Ex(); $this- arrPref = $masterData- getMasterData("mtb_pref", array("pref_id", "pref_name", "rank")); } /** * Page のプロセス. * * @return void */ function process() { // 認証可否の判定 $objSess = new SC_Session(); SC_Utils_Ex sfIsSuccess($objSess); $this- objQuery = new SC_Query(); $this- objConn = new SC_DBConn(); //---- 問合せ編集情報取得 if(isset($_GET["contact_id"]) is_numeric($_GET["contact_id"])) { $contact_id = $_GET["contact_id"]; } elseif(isset($_POST["contact_id"]) is_numeric($_POST["contact_id"])) { $contact_id = $_POST["contact_id"]; } if($contact_id) { //-- 問合せデータ取得 $sql = "SELECT * FROM dtb_contact WHERE del_flg = 0 AND contact_id = ?"; $result = $this- objConn- getAll($sql, array($contact_id)); $this- list_data = $result[0]; //既読に変更 if($this- list_data["status"] == 0 !isset($_POST["status"])) { $this- list_data["status"] = 1; $this- lfRegiserData(array("status"= 1),array(array("column"= "status"))); } elseif($_POST["mode"] == "confirm") { //-- 入力データの変換 $arrRegisterColumn = array(array( "column" = "status", "convert" = "n" ), array( "column" = "del_flg", "convert" = "n"), ); $this- arrForm = $_POST; $this- arrForm = $this- lfConvertParam($this- arrForm, $arrRegisterColumn); //-- 入力チェック $this- arrErr = $this- lfErrorCheck($this- arrForm); //-- 入力エラー発生? if ($this- arrErr) { foreach($this- arrForm as $key = $val) { $this- list_data[ $key ] = $val; } } else { $this- list_data["status"] = $this- arrForm["status"]; $this- lfRegiserData(array("status"= $this- arrForm["status"]),array(array("column"= "status"))); } } //問合せ履歴情報の取得 $this- arrContactHistory = $this- lfContactHistory($this- list_data[ customer_id ]); } else { $this- list_data = array(); } //---- ページ表示 $objView = new SC_AdminView(); $objView- assignobj($this); $objView- display(MAIN_FRAME); } /** * デストラクタ. * * @return void */ function destroy() { parent destroy(); } // 編集登録 function lfRegiserData($array, $arrRegisterColumn) { foreach ($arrRegisterColumn as $data) { if($array[$data["column"]] != "") { $arrRegist[$data["column"]] = $array[$data["column"]]; } else { unset($arrRegist[$data["column"]]); } } //-- 編集登録実行 $this- objQuery- update("dtb_contact", $arrRegist, "contact_id = ?",array($this- list_data["contact_id"])); } //---- 取得文字列の変換 function lfConvertParam($array, $arrRegisterColumn) { /* * 文字列の変換 * K 「半角(ハンカク)片仮名」を「全角片仮名」に変換 * C 「全角ひら仮名」を「全角かた仮名」に変換 * V 濁点付きの文字を一文字に変換。"K","H"と共に使用します * n 「全角」数字を「半角(ハンカク)」に変換 * a 全角英数字を半角英数字に変換する */ // カラム名とコンバート情報 foreach ($arrRegisterColumn as $data) { $arrConvList[ $data["column"] ] = $data["convert"]; } // 文字変換 foreach ($arrConvList as $key = $val) { // POSTされてきた値のみ変換する。 if(strlen(($array[$key])) 0) { $array[$key] = mb_convert_kana($array[$key] ,$val); } } return $array; } //---- 入力エラーチェック function lfErrorCheck($array) { $objErr = new SC_CheckError($array); $objErr- doFunc(array("対応状態", status ), array("EXIST_CHECK")); return $objErr- arrErr; } //問合せ履歴情報の取得 function lfContactHistory($customer_id){ $this- tpl_pageno = $_POST[ search_pageno ]; $this- edit_customer_id = $customer_id; // ページ送りの処理 $page_max = SEARCH_PMAX; //問合せ履歴の件数取得 $this- tpl_linemax = $this- objQuery- count("dtb_contact","customer_id=? AND del_flg = 0 ", array($customer_id)); $linemax = $this- tpl_linemax; // ページ送りの取得 $objNavi = new SC_PageNavi($_POST[ search_pageno ], $linemax, $page_max, "fnNaviSearchPage2", NAVI_PMAX); $this- arrPagenavi = $objNavi- arrPagenavi; $this- arrPagenavi[ mode ] = ; $startno = $objNavi- start_row; // 取得範囲の指定(開始行番号、行数のセット) $this- objQuery- setlimitoffset($page_max, $startno); // 表示順序 $order = "contact_id DESC"; $this- objQuery- setorder($order); //問合せ履歴情報の取得 $arrContactHistory = $this- objQuery- select("*", "dtb_contact", "customer_id=? AND del_flg = 0 ", array($customer_id)); return $arrContactHistory; } } ? }} /data/Smarty/templates/default/admin/customer/contact_detail.tpl highlight(linenumber,php){{ script type="text/javascript" !-- function fnReturn() { document.form_search.action = ./contact.php ; document.form_search.submit(); return false; } /script !--★★メインコンテンツ★★-- table width="878" border="0" cellspacing="0" cellpadding="0" summary=" " form name="form2" id="form2" method="post" action=" !--{$smarty.server.PHP_SELF|escape}-- " input type="hidden" name="mode" value="confirm" input type="hidden" name="contact_id" value=" !--{$list_data.contact_id|escape}-- " tr valign="top" td background=" !--{$TPL_DIR}-- img/contents/navi_bg.gif" height="402" !--▼SUB NAVI-- !--{include file=$tpl_subnavi}-- !--▲SUB NAVI-- /td td class="mainbg" !--▼登録テーブルここから-- table width="737" border="0" cellspacing="0" cellpadding="0" summary=" " !--メインエリア-- tr td align="center" table width="706" border="0" cellspacing="0" cellpadding="0" summary=" " tr td height="14" /td /tr tr td colspan="3" img src=" !--{$TPL_DIR}-- img/contents/main_top.jpg" width="706" height="14" alt="" /td /tr tr td background=" !--{$TPL_DIR}-- img/contents/main_left.jpg" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="14" height="1" alt="" /td td bgcolor="#cccccc" table width="678" border="0" cellspacing="0" cellpadding="0" summary=" " tr td colspan="3" img src=" !--{$TPL_DIR}-- img/contents/contents_title_top.gif" width="678" height="7" alt="" /td /tr tr td background=" !--{$TPL_DIR}-- img/contents/contents_title_left_bg.gif" img src=" !--{$TPL_DIR}-- img/contents/contents_title_left.gif" width="22" height="12" alt="" /td td bgcolor="#636469" width="638" class="fs14n" span class="white" !--コンテンツタイトル-- 問合せ詳細 /span /td td background=" !--{$TPL_DIR}-- img/contents/contents_title_right_bg.gif" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="18" height="1" alt="" /td /tr tr td colspan="3" img src=" !--{$TPL_DIR}-- img/contents/contents_title_bottom.gif" width="678" height="7" alt="" /td /tr tr td colspan="3" img src=" !--{$TPL_DIR}-- img/contents/main_bar.jpg" width="678" height="10" alt="" /td /tr /table table width="678" border="0" cellspacing="1" cellpadding="8" summary=" " tr class="fs12n" td bgcolor="#f2f1ec" width="100" 対応状況 /td td bgcolor="#ffffff" width="" align="center" select name="status" id="status" option value="1" !--{if $list_data.status eq 1}-- selected="selected" !--{/if}-- 既読 /option option value="2" !--{if $list_data.status eq 2}-- selected="selected" !--{/if}-- 対応中 /option option value="3" !--{if $list_data.status eq 3}-- selected="selected" !--{/if}-- 対応済 /option /select input type="submit" alt="変更する" name="subm" value="変更する" /td td bgcolor="#f2f1ec" width="100" 顧客ID /td td bgcolor="#ffffff" width="" align="center" !--{if $list_data.customer_id}-- !--{$list_data.customer_id|escape}-- !--{else}-- 非会員 !--{/if}-- /td /tr tr class="fs12n" td bgcolor="#f2f1ec" width="100" お名前 /td td bgcolor="#ffffff" width="" !--{$list_data.name|escape}-- nbsp; !--{$list_data.name_f|escape}-- nbsp;様 /td td bgcolor="#f2f1ec" width="100" 電話番号 /td td bgcolor="#ffffff" width="" !--{$list_data.tel01|escape}-- - !--{$list_data.tel02|escape}-- - !--{$list_data.tel03|escape}-- /td /tr tr class="fs12" td bgcolor="#f2f1ec" width="100" ご住所 /td td bgcolor="#ffffff" colspan="3" 〒 !--{$list_data.zip01|escape}-- - !--{$list_data.zip02|escape}-- !--{$arrPref[$list_data.pref]}-- !--{$list_data.addr01|escape}-- /td /tr tr class="fs12n" td bgcolor="#f2f1ec" width="100" メールアドレス /td td bgcolor="#ffffff" colspan="3" !--{$list_data.email|escape}-- /td /tr tr class="fs12n" td bgcolor="#f2f1ec" width="" align="center" colspan="4" 問い合わせ内容 /td /tr tr td bgcolor="#ffffff" width="" class="fs10n" colspan="4" span class="red12" !--{$arrErr.note}-- /span !--{$list_data.message|escape|nl2br}-- /td /tr tr class="fs12n" /tr /table table width="678" border="0" cellspacing="0" cellpadding="0" summary=" " tr td bgcolor="#cccccc" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td td img src=" !--{$TPL_DIR}-- img/contents/tbl_top.gif" width="676" height="7" alt="" /td td bgcolor="#cccccc" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td /tr tr td bgcolor="#cccccc" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="10" alt="" /td td bgcolor="#e9e7de" align="center" table border="0" cellspacing="0" cellpadding="0" summary=" " tr td !--▼検索結果へ戻る-- a href="./contact.php" onmouseover="chgImg( !--{$TPL_DIR}-- img/contents/btn_search_back_on.jpg , back );" onmouseout="chgImg( !--{$TPL_DIR}-- img/contents/btn_search_back.jpg , back );" onclick="return fnReturn();" img src=" !--{$TPL_DIR}-- img/contents/btn_search_back.jpg" width="123" height="24" alt="検索画面に戻る" border="0" name="back" /a !--▲検索結果へ戻る-- /td /tr /table /td td bgcolor="#cccccc" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="10" alt="" /td /tr tr td colspan="3" img src=" !--{$TPL_DIR}-- img/contents/tbl_bottom.gif" width="678" height="8" alt="" /td /tr /table /td td background=" !--{$TPL_DIR}-- img/contents/main_right.jpg" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="14" height="1" alt="" /td /tr tr td colspan="3" img src=" !--{$TPL_DIR}-- img/contents/main_bottom.jpg" width="706" height="14" alt="" /td /tr tr td height="30" /td /tr /table /td /tr !--メインエリア-- /table !--▲登録テーブルここまで-- /td /tr /form /table !--★★メインコンテンツ★★-- !--★★問い合わせ履歴一覧★★-- form name="form1" id="form1" method="post" action=" !--{$smarty.server.PHP_SELF|escape}-- ?contact_id= !--{$list_data.contact_id}-- " input type="hidden" name="mode" value="" input type="hidden" name="contact_id" value=" !--{$list_data.contact_id}-- " input type="hidden" name="search_pageno" value=" !--{$tpl_pageno}-- " table width="878" border="0" cellspacing="0" cellpadding="0" summary=" " tr td colspan="2" img src=" !--{$TPL_DIR}-- img/contents/search_line.jpg" width="878" height="12" alt="" /td /tr tr bgcolor="cbcbcb" td table border="0" cellspacing="0" cellpadding="0" summary=" " tr td img src=" !--{$TPL_DIR}-- img/contents/search_left.gif" width="19" height="22" alt="" /td td !--問い合わせ履歴一覧-- table border="0" cellspacing="0" cellpadding="0" summary=" " tr td img src=" !--{$TPL_DIR}-- img/contents/reselt_left_top.gif" width="22" height="5" alt="" /td td background=" !--{$TPL_DIR}-- img/contents/reselt_top_bg.gif" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td td img src=" !--{$TPL_DIR}-- img/contents/reselt_right_top.gif" width="22" height="5" alt="" /td /tr tr td background=" !--{$TPL_DIR}-- img/contents/reselt_left_bg.gif" img src=" !--{$TPL_DIR}-- img/contents/reselt_left_middle.gif" width="22" height="12" alt="" /td td bgcolor="#393a48" class="white10" 問合せ履歴一覧 span class="reselt" !--問合せ履歴一覧-- !--{$tpl_linemax}-- 件 /span nbsp;が該当しました。 /td td background=" !--{$TPL_DIR}-- img/contents/reselt_right_bg.gif" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="22" height="8" alt="" /td /tr tr td img src=" !--{$TPL_DIR}-- img/contents/reselt_left_bottom.gif" width="22" height="5" alt="" /td td background=" !--{$TPL_DIR}-- img/contents/reselt_bottom_bg.gif" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td td img src=" !--{$TPL_DIR}-- img/contents/reselt_right_bottom.gif" width="22" height="5" alt="" /td /tr /table !--問合せ履歴一覧-- /td td img src=" !--{$TPL_DIR}-- img/common/_.gif" width="8" height="1" alt="" /td /tr /table /td td align="right" !--{include file=$tpl_pager}-- /td /tr tr td bgcolor="cbcbcb" colspan="2" img src=" !--{$TPL_DIR}-- img/common/_.gif" width="1" height="5" alt="" /td /tr /table /form table width="878" border="0" cellspacing="0" cellpadding="0" summary=" " tr td bgcolor="#f0f0f0" align="center" table width="840" border="0" cellspacing="0" cellpadding="0" summary=" " tr td height="12" /td /tr tr !--{if $tpl_linemax 0}-- td bgcolor="#cccccc" !--問合せ履歴一覧表示テーブル-- table width="840" border="0" cellspacing="1" cellpadding="5" summary=" " tr bgcolor="#636469" align="center" class="fs10n" td width="160" span class="white" 日付 /span /td td width="140" span class="white" 問合せ番号 /span /td td width="140" span class="white" 内容 /span /td td width="140" span class="white" 対応状況 /span /td /tr !--{section name=cnt loop=$arrContactHistory}-- tr bgcolor="#ffffff" align="center" class="fs12" td width="" !--{$arrContactHistory[cnt].create_date|sfDispDBDate}-- /td td width="" a href="contact_detail.php?contact_id= !--{$arrContactHistory[cnt].contact_id}-- " !--{$arrContactHistory[cnt].contact_id}-- /a /td td width="" !--{$arrContactHistory[cnt].message|truncate 40}-- /td td width="" !--{if $arrContactHistory[cnt].status eq 1}-- 既読 !--{elseif $arrContactHistory[cnt].status eq 2}-- 対応中 !--{elseif $arrContactHistory[cnt].status eq 3}-- 対応済 !--{else}-- 未読 !--{ /if }-- /td /tr !--{/section}-- /table !--問合せ履歴一覧表示テーブル-- /td !--{else}-- td align="center" class="fs12" 問合せ履歴はありません。 /td !--{/if}-- /tr /table /td /tr /table !--★★検索結果一覧★★-- }} 配信されるメールのテンプレート場所 [DocumentRoot]/html/eccube/data/Smarty/templates/default/mail_templates
https://w.atwiki.jp/lucier/pages/40.html
売上集計機能の職業別、会員別がMySQLの場合、システムエラーになる。 原因はPostgreSQLがデフォルトとして構築されているため、 SQLもポスグレ仕様だから。 基本情報管理>パラメータ管理でDEBUG_MODEをtrueに設定してると、 以下のようなエラーメッセージがわーっと出る。 SELECT job, count(*) AS order_count, SUM(total) AS total, trunc(AVG(total)) AS total_average FROM dtb_customer AS T1 LEFT JOIN dtb_order AS T2 USING ( customer_id ) WHERE T2.create_date = 2008/10/18 AND T2.create_date date( 2008/10/20 ) AND T2.del_flg = 0 and T2.status 3 GROUP BY job ORDER BY total DESCDB Error unknown error SELECT job, count(*) AS order_count, SUM(total) AS total, trunc(AVG(total)) AS total_average FROM dtb_customer AS T1 LEFT JOIN dtb_order AS T2 USING ( customer_id ) WHERE T2.create_date = 2008/10/18 AND T2.create_date date( 2008/10/20 ) AND T2.del_flg = 0 and T2.status 3 GROUP BY job ORDER BY total DESC [nativecode=1305 ** FUNCTION eccube_db.trunc does not exist] LC_Page_Admin_Total- lfGetOrderMemberの上記SQLで AVG(total)が問題のようです。 正しくはAVG(total),0とすべき。 これでシステムエラーにならない。 2009.5.19追記 headerが先に送信されて、 グラフ出力の際にWarningが出た。 原因はカスタマイズでタイムアウトしないように、 SC_Batch_Daily.phpのリアルタイム集計メソッドlfRealTimeDailyTotal()の中で SC_Utils_Ex sfFlush(); を呼び出していたことだった・・・orz 3日間くらいかかってやっとたどり着いた新事実・・・ なので、タイムアウトを防ぐ処理を直にSC_Batch_Daily.phpのlfRealTimeDailyTotal()の最後に以下を書いた。 set_time_limit(0);// 実行時間を制限しない これでタイムアウトもエラーもない。 はぁ。。。よかった・・・ 売り上げ集計の会員別集計と職業別集計でのSQLバグ[eccube2.3.3+mysql] 環境:eccube 2.3.3+apache2.2+MySQL 5.0.75+PHP5.2.6+Linux(ubuntu) 状況:会員別集計を実行するとシステムエラーがでる site.log抜粋: SELECT COUNT(*) AS order_count, SUM(total) AS total, TRUNCATEATE(*1) AS total_average, order_sex FROM dtb_order WHERE create_date = 2009/1/1 00 00 00 AND create_date date( 2009/02/01 ) AND customer_id 0 AND del_flg = 0 AND status 3 GROUP BY order_sex [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near total_average, order_sex FROM dtb_order WHERE create_date = 2009/1/1 00 00 00 at line 1] 原因:TRUNCATEATE(*2)→trunc(AVG(total),0)に変更 ※職業別集計もバグっていたので下記の通り変更しました (2009/1/28 12 00 更新) LC_Page_Admin_Total- lfGetOrderMemberの711行目 trunc(AVG(total))→trunc(AVG(total),0)に変更 ※念のため記述しておきますが、当方公式サイトの開発環境ソースのコミット権はありませんので、公式サイトの開発環境ソースの変更はしていません。 上記の変更箇所は当方開発環境内の話です ただし、公式サイトの2.3.3のソースであれば、上記と同様の変更で対応可能です 上記の変更で当方開発中のサイトは間に合いますが、 根本的にclass[SC_DB_DBFactory_MYSQL]の[sfChangeTrunc]と[sfChangeRANDOM]を再入可能に変更すべきかと思います 例えば、SC_DB_DBFactory_MYSQLの246行目でeregi_replace関数の正規表現を $changesql = eregi_replace("( TRUNC)", " TRUNCATE", $sql); から $changesql = eregi_replace("( TRUNC *\()", " TRUNCATE(", $sql); のようにするとか。(上記は不完全でTRUNCの前に四則演算子等が来るとヒットしません) SQL文は将来において、おおいに変更される箇所なので、 内部の処理を知らないとSQLが書けないことに問題があると思います (2009/1/28 20 30 更新) -- 2009-05-14 19 55 58 コメント すべてのコメントを見る